
#include "Thread.h"

using namespace std;

//Inicializa el atributo del Thread (ATTACH=TRUE, DEATTACH= FALSE)
Thread::Thread(bool atributo){
	pthread_attr_init(&this->attr);
	if(atributo == false){
		pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
	}
	this->running = false;
}

//Iniciliza la ejecución del Thread. Se debe implementar el metodo run.
int Thread::start()
{
   return pthread_create(&this->threadid,&this->attr,Thread::runThread,this);
}

//Realiza el Join del Thread.
int Thread::join()
{
    return pthread_join(this->threadid,&this->dato);
}

//Metodo que llama al medoto virutal Run.
void* Thread::runThread(void* thread)
{
    Thread* aux=(Thread*)thread;
    aux->running = true;
    aux->run();
    return NULL;
}
//Obtiene el miembo running.
bool Thread::get_running()
{
	return this->running;
}

//Setea el miembro running
void Thread::set_running(bool running)
{
	this->running = running;
}
//setea el miembro dato
void Thread::set_dato(void * dato)
{
	this->dato = dato;
}

//Obtengo el miembro dato
void* Thread::get_dato()
{
	return this->dato;
}

// Obtengo el threadID.
pthread_t Thread::get_id()
{
	return this->threadid;
}
